// indexedDB 是一个为了能够在客户端存储可观数量的结构化数据，并且在这些数据上使用索引进行高性能检索的 API。虽然 DOM 存储 对于存储少量数据是非常有用的，但是它对大量结构化数据的存储就显得力不从心了。IndexedDB 则提供了这样的一个解决方案
// 方法借鉴来自:https://www.web-tinker.com/article/20146.html
// 天明°2015.10.9
var dbname = isExitsVariable(dbname)?dbname:'Testdb'; //如果用户不定义数据库名称,默认使用Testdb
var cn,db;
$(document).ready(function() {
	window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
	if(!window.indexedDB){
	    console.log("你的浏览器不支持IndexedDB");
	}
	cn=indexedDB.open(dbname,1);
	cn.onupgradeneeded=function(e){
	  db=e.target.result;
	  var o=db.createObjectStore(dbname,{keyPath:"key"});
	  o.createIndex("值","value",{unique:true});
	};
	cn.onsuccess=function(e){
	  db=e.target.result;
	  console.log('indexdb 打开成功!');
	  db.doTransaction=function(f){
	    var o=db.transaction(dbname,"readwrite");
	    o.onerror=function(){console.log("事务运行错误")};
	    f(o.objectStore(dbname));
	  };
	};
});
/**
 * [indexdb_Add 添加数据]
 * @param  {[type]} key   [key]
 * @param  {[type]} value [值,可以是字符串或者json]
 * @return {[type]}       [description]
 */
function indexdb_add(key,value){
  db.doTransaction(function(e){
    e.add({key:key,value:value});
    console.log('存入成功,key=>'+key);
  });
}
/**
 * [indexdb_find description]
 * @param  {[type]}   str [传入要查找的key]
 * @param  {Function} cb  [回调函数 function(res){}]
 * @return {[type]}       [description]
 */
function indexdb_find(str,cb){
	db.doTransaction(function(e){
   	e.get(str).onsuccess=function(e){
	    var result=e.target.result;
	    //console.log(result);
	    cb && cb(result);
    };
  });
}
/**
 * [indexdb_clear 清空存储数据]
 * @return {[type]} [description]
 */
function indexdb_clear(){
  db.doTransaction(function(e){
    //清空存储对象内原来的数据
    e.clear();
  });
}
/**
 * [indexdb_del 删除数据库]
 * @param  {[type]} name [数据库名字]
 * @return {[type]}      [description]
 */
function indexdb_del(name){
	indexedDB.deleteDatabase(name);
	console.log(name+'->数据库删除成功^_^');
}
/**
 * [isExitsVariable 检测变量是否存在]
 * 来自:http://www.cnblogs.com/fumj/p/3414559.html
 * @param  {[type]}  variableName [description]
 * @return {Boolean}              [description]
 */
function isExitsVariable(variableName) {
    try {
        if (typeof(variableName) == "undefined") {
            //console.log("变量不存在~"); 
            return false;
        } else {
            //console.log("变量存在~"); 
            return true;
        }
    } catch(e) {}
    return false;
}
/**
 * [sleep 程序执行sleep]
 * @param  {[type]} d [时间,毫秒]
 * @return {[type]}   [description]
 */
function sleep(d){
  for(var t = Date.now();Date.now() - t <= d;);
}